iT邦幫忙

2022 iThome 鐵人賽

DAY 5
0

前言:

在react中資料的傳遞都需要上下層傳遞,不過在大型專案之中,可能會因為傳遞的層級太多容易搞混或是程式碼過於複雜

redux:是一個全域的狀態管理工具,能管理整個網站需要的 State,

每個Component都有各自的State,當要嘗試共用的時候就會衍生出很多問題,例如:原本該放在child的State為了共用,需要搬到parent State,最後導致Parent Component擁有一堆State,於是redux在大型專案中就有其存在的必要了。

當所有的資料都能放在 Redux,需要資料的 Component,也直接從 Redux 取得,所以組件管理 state 變得更方便,而且也確保整個專案的資料都來自同一個地方。

Redux 在專案內的角色還能夠讓「畫面 Component」及「資料 Redux」分離。
如果我們在 Component 內寫下一堆關於獲取資料的 API 請求,那程式就會變得非常的亂,且發生問題時也不容易找到。
將畫面和資料區分出來,便不會使得 Component 內隨著專案越來越大變得亂七八糟。

圖片

store的功能

Redux把更新邏輯轉為在reducer做處理,同時擁有composition與pure function的特性,使開發上更易實作。

官方的介紹:Redux是一個predictable的狀態管理套件,認識Redux之前,你必須要了解為什麼Redux是predictable(可預見):

  1. 狀態是immutable Object
  2. 所有的State change都必須經過actions
  3. reducers每次呼叫都是使用當前的State:(state, action) => state

綜合上述,predictable表示你可以輕易地掌握你使用這個action之後,state是如何改變的

三大特色:

  1. Single source of truth
  2. State is read-only
  3. Changes are made with pure functions

Global state皆存在Single-state tree中

store.getState();

State在每次提出時,皆為read-only,唯一會改變State的方式就是使用action發起更新請求

store.dispatch({
  type: 'UPDATE_SINGLE_USER',
  payload: {
      name: 'James',
      intro: '123',
  }
})

reducer,或是可以稱pure reducer,將每個更新邏輯都拆分的很細很單純,再加上都是pure的特色,降低了改A壞B的發生率:

function visibilityFilter(state = 'SHOW_ALL', action) {
  switch (action.type) {
    case 'SET_VISIBILITY_FILTER':
      return action.filter
    default:
      return state
  }
}

明日待續:
Redux基本應用
後天待續(如果redux講完的話)
利用react hook來實現redux


上一篇
超突然決定來介紹Generator function吧
下一篇
Redux基本應用
系列文
前端技術研究30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言